package dao;

import hbt.HibernateUtil;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import Dominio.Proveedor;


public class ProveedorDAO {

	
	private static ProveedorDAO instancia = null;
	private static SessionFactory sf = null;
	private Session session = null;

	public static ProveedorDAO getInstancia() {
		if (instancia == null) {
			sf = HibernateUtil.getSessionFactory();
			instancia = new ProveedorDAO();
		}
		return instancia;
	}

	private Session getSession() {
		if (session == null)
			session = sf.openSession();
		return session;
	}

	public void closeSession() {
		if (session != null)
			session.close();
	}

	public void agregarProveedor(Proveedor prov) {
		Session s = getSession();
		s.beginTransaction();
		s.persist(prov);
		s.flush();
		s.getTransaction().commit();

	}

	public String getUltimoIdProveedor() {
		Session s = getSession();
		String o = (String) s.createQuery(
				"select max(prov.id) from Proveedor prov")
				.uniqueResult().toString();
		return o;

	}

	
	
	public void eliminarProveedor(Proveedor prov) {
		Session s = getSession();
		s.beginTransaction();
		s.delete(prov);
		s.flush();
		s.getTransaction().commit();
	}

	public Proveedor loadProveedor(Proveedor prov) {
		Session s = this.getSession();

		s.load(prov, prov.getId());
		return prov;

	}

	@SuppressWarnings("unchecked")
	public List<Proveedor> listarProveedores() {

		Session s = this.getSession();
		List<Proveedor> lista = s.createQuery("from Proveedor order by id").list();
		return lista;
	}
		

	public void modificarProveedor(Proveedor prov) {
		
		Session s = getSession();
		s.beginTransaction();
		s.update(prov);
		s.flush();
		s.getTransaction().commit();
	}

	@SuppressWarnings("unchecked")
	public List<String> listaIdProveedor() {
		Session s = getSession();
		List<String> lista = s.createQuery(
				"select prov.idProveedor from Proveedor prov").list();
		s.clear();
		return lista;
	}

	public Proveedor buscarProveedorPorCUIT(String cuit) 
	{
		try
		{
			Session s = getSession();
			String query = "select prov from Proveedor prov where prov.CUIT = '"+cuit+"'";
			Proveedor prov = (Proveedor) s.createQuery(query).uniqueResult();
			s.clear();
			return prov;
		}
		catch(Exception e)
		{
			return null;
		}
	}

	public String imprimirProveedor(String id) {
		Session s = getSession();

		Proveedor prov = (Proveedor) s.getNamedQuery("imprimir Proveedor")
				.setString("id", id).uniqueResult();

		String str;
		if (prov != null) {

			str = "numero de Proveedor: " + prov.getId()
					+ "\nrazon social: " + prov.getRazonSocial() + "\npais: "
					+ prov.getTipoCategoria();
		}
		else
			str = null;
		s.clear();
		return str;
	}


}